package com.saodisheng.service;

import com.jfinal.kit.*;

/**
 * description:
 *
 * @author 扫地生_saodisheng
 * @date 2022/1/28
 */
public interface RegService {
	/**
	 * 用户是否存在
	 */
	boolean isEmaiExists(String email);
	
	boolean isNickNameExists(String nickName);
	
	/**
	 * 2次密码是否相同
	 */
	boolean isPasswordOK(String ps1, String ps2);

	/**
	 * 昵称是否已被注册，昵称不区分大小写，以免存在多个用户昵称看起来一个样的情况
	 *
	 *  mysql 的 where 字句与 order by 子句默认不区分大小写，区分大小写需要在
	 *  字段名或字段值前面使用 binary 关键字例如：
	 *  where nickName = binary "jfinal" 或者 where binary nickName = "jfinal"，前者性能要高
	 *
	 *  为了避免不同的 mysql 配置破坏掉 mysql 的 where 不区分大小写的行为，这里在 sql 中使用
	 *  lower(...) 来处理，参数 nickName 也用 toLowerCase() 方法来处理，再次确保不区分大小写
	 */
	boolean isUserNameExists(String userName);
	
	
	/**
	 * 账户注册，hashedPass = sha256(32字符salt + pass)
	 */
	Ret reg(String email, String userName, String password, String nickName, String ip);
	
	/**
	 * 激活账号，返回 false 表示激活码已过期或者不存在
	 * 	激活账号不要去自动登录，激活邮件如果发错到了别人的邮箱，会有别人冒用的可能
	 * 并且登录功能还有额外有选择过期时间的功能
	 */
	Ret activate(String authCodeId);

	Ret reSendActivateEmail(String userName);
}
